DTP DarkRP Team Persistence

DTP

Dark RP Team Persistence


See Our DTP Code Here

In Addition File Structure is dtp/lua/autorun

In Addition File Structure is dtp/lua/autorun/client/cl_remember_team.lua

In Addition File Structure is dtp/lua/autorun/server/sv_remember_team.lua

Code as Follows Starting Of As cl_remember_team.lua

 


-- Function to notify the player that their team has been restored
net.Receive("NotifyTeamRestored", function()
    local restoredTeam = net.ReadString()

    -- Display a message to the player in the chat
    chat.AddText(Color(0, 255, 0), "[DarkRP] ", Color(255, 255, 255), "You have been placed back into your previous team: " .. restoredTeam)
end)

print("Server Client Code Loaded For SaveTeam!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")


Server Side Code sv_remember_team.lua


-- File path: lua/autorun/server/sv_remember_team.lua

-- Function to print ASCII art to console on server startup
local function PrintAsciiArt()
    print([[
      DDDD   TTTTT  PPPP  
      D   D    T    P   P 
      D   D    T    PPPP  
      D   D    T    P     
      DDDD     T    P
    ]])
    print("[DarkRP] Team Persistence Addon Loaded (DTP)")
end

-- Ensure the database table exists on server startup
local function EnsureDatabaseExists()
    if not sql.TableExists("darkrp_team_memory") then
        local createTableQuery = [[
            CREATE TABLE IF NOT EXISTS darkrp_team_memory (
                steamid TEXT PRIMARY KEY,
                team INTEGER
            )
        ]]
        local result = sql.Query(createTableQuery)

        if result == false then
            print("SQL Error while creating table: " .. sql.LastError())
        else
            print("[DarkRP] Team memory table created successfully!")
        end
    else
        print("[DarkRP] Team memory table already exists.")
    end
end

-- Call the function when the server starts
hook.Add("Initialize", "EnsureTeamMemoryDatabase", function()
    PrintAsciiArt()  -- Print ASCII art during server startup
    EnsureDatabaseExists()
end)

-- Function to save player's team when they disconnect or change teams
local function SavePlayerTeam(ply)
    if not IsValid(ply) then return end

    local steamID = ply:SteamID()
    local teamID = ply:Team()

    -- Store the team in the SQL database, overwriting the previous entry
    local query = "REPLACE INTO darkrp_team_memory (steamid, team) VALUES (" .. sql.SQLStr(steamID) .. ", " .. teamID .. ")"
    local result = sql.Query(query)

    if result == false then
        print("SQL Error while saving player team: " .. sql.LastError())
    else
        print("Saved team for player " .. ply:Nick() .. " (SteamID: " .. steamID .. ")")
    end
end

-- Hook to save the team on player disconnect
hook.Add("PlayerDisconnected", "SaveTeamOnDisconnect", function(ply)
    SavePlayerTeam(ply)
end)

-- Function to restore player's team when they join or revert to default
local function RestorePlayerTeam(ply)
    local steamID = ply:SteamID()

    -- Retrieve the team from the SQL database
    local query = "SELECT team FROM darkrp_team_memory WHERE steamid = " .. sql.SQLStr(steamID)
    local result = sql.QueryRow(query)

    -- Default team (e.g., TEAM_CITIZEN) if no previous team is found
    local defaultTeam = TEAM_CITIZEN

    if result and result.team then
        local teamID = tonumber(result.team)

        -- Check if the team is valid
        if team.Valid(teamID) then
            -- Set the player's team to the one from the database
            ply:changeTeam(teamID, true)  -- The `true` bypasses checks for joining restrictions change to false to stop the bypass

            -- Notify the player about team restoration
            net.Start("NotifyTeamRestored")
            net.WriteString(team.GetName(teamID))  -- Send the team name to the client
            net.Send(ply)

            print("Restored team for player " .. ply:Nick() .. " (SteamID: " .. steamID .. ") to team " .. team.GetName(teamID))
        else
            -- If the team is not valid, fall back to default team
            ply:changeTeam(defaultTeam, true)
            print("Invalid team found for player " .. ply:Nick() .. ", reverted to default team.")
        end
    else
        -- If no previous team found, assign to default team
        ply:changeTeam(defaultTeam, true)
        print("No previous team found for player " .. ply:Nick() .. ", assigned to default team.")
    end
end

-- Hook to restore the team on player join
hook.Add("PlayerInitialSpawn", "RestoreTeamOnJoin", function(ply)
    -- Delay a bit to ensure everything is loaded properly
    timer.Simple(1, function()
        if IsValid(ply) then
            RestorePlayerTeam(ply)
        end
    end)
end)

-- Hook to delete previous team entry when the player changes teams
hook.Add("OnPlayerChangedTeam", "RemoveOldTeamEntry", function(ply, oldTeam, newTeam)
    -- Check if the new team is different from the old one
    if oldTeam ~= newTeam then
        local steamID = ply:SteamID()

        -- Delete the old team entry from the database
        local query = "DELETE FROM darkrp_team_memory WHERE steamid = " .. sql.SQLStr(steamID)
        local result = sql.Query(query)

        if result == false then
            print("SQL Error while deleting old team entry: " .. sql.LastError())
        else
            print("Deleted old team entry for player " .. ply:Nick() .. " (SteamID: " .. steamID .. ")")
        end

        -- Save the new team
        SavePlayerTeam(ply)
    end
end)

util.AddNetworkString("NotifyTeamRestored")  -- Register the network message


Or Click Me For The ZIP
 

https://steamcommunity.com/sharedfiles/filedetails/?id=3338646339 STEAM Link